home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / test_bisect.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  9KB  |  607 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import unittest
  5. from test import test_support
  6. from bisect import bisect_right, bisect_left, insort_left, insort_right, insort, bisect
  7. from UserList import UserList
  8.  
  9. class TestBisect(unittest.TestCase):
  10.     precomputedCases = [
  11.         (bisect_right, [], 1, 0),
  12.         (bisect_right, [
  13.             1], 0, 0),
  14.         (bisect_right, [
  15.             1], 1, 1),
  16.         (bisect_right, [
  17.             1], 2, 1),
  18.         (bisect_right, [
  19.             1,
  20.             1], 0, 0),
  21.         (bisect_right, [
  22.             1,
  23.             1], 1, 2),
  24.         (bisect_right, [
  25.             1,
  26.             1], 2, 2),
  27.         (bisect_right, [
  28.             1,
  29.             1,
  30.             1], 0, 0),
  31.         (bisect_right, [
  32.             1,
  33.             1,
  34.             1], 1, 3),
  35.         (bisect_right, [
  36.             1,
  37.             1,
  38.             1], 2, 3),
  39.         (bisect_right, [
  40.             1,
  41.             1,
  42.             1,
  43.             1], 0, 0),
  44.         (bisect_right, [
  45.             1,
  46.             1,
  47.             1,
  48.             1], 1, 4),
  49.         (bisect_right, [
  50.             1,
  51.             1,
  52.             1,
  53.             1], 2, 4),
  54.         (bisect_right, [
  55.             1,
  56.             2], 0, 0),
  57.         (bisect_right, [
  58.             1,
  59.             2], 1, 1),
  60.         (bisect_right, [
  61.             1,
  62.             2], 1.5, 1),
  63.         (bisect_right, [
  64.             1,
  65.             2], 2, 2),
  66.         (bisect_right, [
  67.             1,
  68.             2], 3, 2),
  69.         (bisect_right, [
  70.             1,
  71.             1,
  72.             2,
  73.             2], 0, 0),
  74.         (bisect_right, [
  75.             1,
  76.             1,
  77.             2,
  78.             2], 1, 2),
  79.         (bisect_right, [
  80.             1,
  81.             1,
  82.             2,
  83.             2], 1.5, 2),
  84.         (bisect_right, [
  85.             1,
  86.             1,
  87.             2,
  88.             2], 2, 4),
  89.         (bisect_right, [
  90.             1,
  91.             1,
  92.             2,
  93.             2], 3, 4),
  94.         (bisect_right, [
  95.             1,
  96.             2,
  97.             3], 0, 0),
  98.         (bisect_right, [
  99.             1,
  100.             2,
  101.             3], 1, 1),
  102.         (bisect_right, [
  103.             1,
  104.             2,
  105.             3], 1.5, 1),
  106.         (bisect_right, [
  107.             1,
  108.             2,
  109.             3], 2, 2),
  110.         (bisect_right, [
  111.             1,
  112.             2,
  113.             3], 2.5, 2),
  114.         (bisect_right, [
  115.             1,
  116.             2,
  117.             3], 3, 3),
  118.         (bisect_right, [
  119.             1,
  120.             2,
  121.             3], 4, 3),
  122.         (bisect_right, [
  123.             1,
  124.             2,
  125.             2,
  126.             3,
  127.             3,
  128.             3,
  129.             4,
  130.             4,
  131.             4,
  132.             4], 0, 0),
  133.         (bisect_right, [
  134.             1,
  135.             2,
  136.             2,
  137.             3,
  138.             3,
  139.             3,
  140.             4,
  141.             4,
  142.             4,
  143.             4], 1, 1),
  144.         (bisect_right, [
  145.             1,
  146.             2,
  147.             2,
  148.             3,
  149.             3,
  150.             3,
  151.             4,
  152.             4,
  153.             4,
  154.             4], 1.5, 1),
  155.         (bisect_right, [
  156.             1,
  157.             2,
  158.             2,
  159.             3,
  160.             3,
  161.             3,
  162.             4,
  163.             4,
  164.             4,
  165.             4], 2, 3),
  166.         (bisect_right, [
  167.             1,
  168.             2,
  169.             2,
  170.             3,
  171.             3,
  172.             3,
  173.             4,
  174.             4,
  175.             4,
  176.             4], 2.5, 3),
  177.         (bisect_right, [
  178.             1,
  179.             2,
  180.             2,
  181.             3,
  182.             3,
  183.             3,
  184.             4,
  185.             4,
  186.             4,
  187.             4], 3, 6),
  188.         (bisect_right, [
  189.             1,
  190.             2,
  191.             2,
  192.             3,
  193.             3,
  194.             3,
  195.             4,
  196.             4,
  197.             4,
  198.             4], 3.5, 6),
  199.         (bisect_right, [
  200.             1,
  201.             2,
  202.             2,
  203.             3,
  204.             3,
  205.             3,
  206.             4,
  207.             4,
  208.             4,
  209.             4], 4, 10),
  210.         (bisect_right, [
  211.             1,
  212.             2,
  213.             2,
  214.             3,
  215.             3,
  216.             3,
  217.             4,
  218.             4,
  219.             4,
  220.             4], 5, 10),
  221.         (bisect_left, [], 1, 0),
  222.         (bisect_left, [
  223.             1], 0, 0),
  224.         (bisect_left, [
  225.             1], 1, 0),
  226.         (bisect_left, [
  227.             1], 2, 1),
  228.         (bisect_left, [
  229.             1,
  230.             1], 0, 0),
  231.         (bisect_left, [
  232.             1,
  233.             1], 1, 0),
  234.         (bisect_left, [
  235.             1,
  236.             1], 2, 2),
  237.         (bisect_left, [
  238.             1,
  239.             1,
  240.             1], 0, 0),
  241.         (bisect_left, [
  242.             1,
  243.             1,
  244.             1], 1, 0),
  245.         (bisect_left, [
  246.             1,
  247.             1,
  248.             1], 2, 3),
  249.         (bisect_left, [
  250.             1,
  251.             1,
  252.             1,
  253.             1], 0, 0),
  254.         (bisect_left, [
  255.             1,
  256.             1,
  257.             1,
  258.             1], 1, 0),
  259.         (bisect_left, [
  260.             1,
  261.             1,
  262.             1,
  263.             1], 2, 4),
  264.         (bisect_left, [
  265.             1,
  266.             2], 0, 0),
  267.         (bisect_left, [
  268.             1,
  269.             2], 1, 0),
  270.         (bisect_left, [
  271.             1,
  272.             2], 1.5, 1),
  273.         (bisect_left, [
  274.             1,
  275.             2], 2, 1),
  276.         (bisect_left, [
  277.             1,
  278.             2], 3, 2),
  279.         (bisect_left, [
  280.             1,
  281.             1,
  282.             2,
  283.             2], 0, 0),
  284.         (bisect_left, [
  285.             1,
  286.             1,
  287.             2,
  288.             2], 1, 0),
  289.         (bisect_left, [
  290.             1,
  291.             1,
  292.             2,
  293.             2], 1.5, 2),
  294.         (bisect_left, [
  295.             1,
  296.             1,
  297.             2,
  298.             2], 2, 2),
  299.         (bisect_left, [
  300.             1,
  301.             1,
  302.             2,
  303.             2], 3, 4),
  304.         (bisect_left, [
  305.             1,
  306.             2,
  307.             3], 0, 0),
  308.         (bisect_left, [
  309.             1,
  310.             2,
  311.             3], 1, 0),
  312.         (bisect_left, [
  313.             1,
  314.             2,
  315.             3], 1.5, 1),
  316.         (bisect_left, [
  317.             1,
  318.             2,
  319.             3], 2, 1),
  320.         (bisect_left, [
  321.             1,
  322.             2,
  323.             3], 2.5, 2),
  324.         (bisect_left, [
  325.             1,
  326.             2,
  327.             3], 3, 2),
  328.         (bisect_left, [
  329.             1,
  330.             2,
  331.             3], 4, 3),
  332.         (bisect_left, [
  333.             1,
  334.             2,
  335.             2,
  336.             3,
  337.             3,
  338.             3,
  339.             4,
  340.             4,
  341.             4,
  342.             4], 0, 0),
  343.         (bisect_left, [
  344.             1,
  345.             2,
  346.             2,
  347.             3,
  348.             3,
  349.             3,
  350.             4,
  351.             4,
  352.             4,
  353.             4], 1, 0),
  354.         (bisect_left, [
  355.             1,
  356.             2,
  357.             2,
  358.             3,
  359.             3,
  360.             3,
  361.             4,
  362.             4,
  363.             4,
  364.             4], 1.5, 1),
  365.         (bisect_left, [
  366.             1,
  367.             2,
  368.             2,
  369.             3,
  370.             3,
  371.             3,
  372.             4,
  373.             4,
  374.             4,
  375.             4], 2, 1),
  376.         (bisect_left, [
  377.             1,
  378.             2,
  379.             2,
  380.             3,
  381.             3,
  382.             3,
  383.             4,
  384.             4,
  385.             4,
  386.             4], 2.5, 3),
  387.         (bisect_left, [
  388.             1,
  389.             2,
  390.             2,
  391.             3,
  392.             3,
  393.             3,
  394.             4,
  395.             4,
  396.             4,
  397.             4], 3, 3),
  398.         (bisect_left, [
  399.             1,
  400.             2,
  401.             2,
  402.             3,
  403.             3,
  404.             3,
  405.             4,
  406.             4,
  407.             4,
  408.             4], 3.5, 6),
  409.         (bisect_left, [
  410.             1,
  411.             2,
  412.             2,
  413.             3,
  414.             3,
  415.             3,
  416.             4,
  417.             4,
  418.             4,
  419.             4], 4, 6),
  420.         (bisect_left, [
  421.             1,
  422.             2,
  423.             2,
  424.             3,
  425.             3,
  426.             3,
  427.             4,
  428.             4,
  429.             4,
  430.             4], 5, 10)]
  431.     
  432.     def test_precomputed(self):
  433.         for func, data, elem, expected in self.precomputedCases:
  434.             self.assertEqual(func(data, elem), expected)
  435.             self.assertEqual(func(UserList(data), elem), expected)
  436.         
  437.  
  438.     
  439.     def test_random(self, n = 25):
  440.         randrange = randrange
  441.         import random
  442.         for i in xrange(n):
  443.             data = [ randrange(0, n, 2) for j in xrange(i) ]
  444.             data.sort()
  445.             elem = randrange(-1, n + 1)
  446.             ip = bisect_left(data, elem)
  447.             if ip > 0:
  448.                 self.failUnless(data[ip - 1] < elem)
  449.             
  450.             ip = bisect_right(data, elem)
  451.             if ip < len(data):
  452.                 self.failUnless(elem < data[ip])
  453.             
  454.             if ip > 0:
  455.                 self.failUnless(data[ip - 1] <= elem)
  456.                 continue
  457.         
  458.  
  459.     
  460.     def test_optionalSlicing(self):
  461.         for func, data, elem, expected in self.precomputedCases:
  462.             for lo in xrange(4):
  463.                 lo = min(len(data), lo)
  464.                 for hi in xrange(3, 8):
  465.                     hi = min(len(data), hi)
  466.                     ip = func(data, elem, lo, hi)
  467.                     None(self.failUnless if ip <= ip else ip <= hi)
  468.                     if func is bisect_left and ip < hi:
  469.                         self.failUnless(elem <= data[ip])
  470.                     
  471.                     if func is bisect_left and ip > lo:
  472.                         self.failUnless(data[ip - 1] < elem)
  473.                     
  474.                     if func is bisect_right and ip < hi:
  475.                         self.failUnless(elem < data[ip])
  476.                     
  477.                     if func is bisect_right and ip > lo:
  478.                         self.failUnless(data[ip - 1] <= elem)
  479.                     
  480.                     self.assertEqual(ip, max(lo, min(hi, expected)))
  481.                 
  482.             
  483.         
  484.  
  485.     
  486.     def test_backcompatibility(self):
  487.         self.assertEqual(bisect, bisect_right)
  488.  
  489.  
  490.  
  491. class TestInsort(unittest.TestCase):
  492.     
  493.     def test_vsBuiltinSort(self, n = 500):
  494.         choice = choice
  495.         import random
  496.         for insorted in (list(), UserList()):
  497.             for i in xrange(n):
  498.                 digit = choice('0123456789')
  499.                 if digit in '02468':
  500.                     f = insort_left
  501.                 else:
  502.                     f = insort_right
  503.                 f(insorted, digit)
  504.             
  505.         
  506.         self.assertEqual(sorted(insorted), insorted)
  507.  
  508.     
  509.     def test_backcompatibility(self):
  510.         self.assertEqual(insort, insort_right)
  511.  
  512.  
  513.  
  514. class LenOnly:
  515.     '''Dummy sequence class defining __len__ but not __getitem__.'''
  516.     
  517.     def __len__(self):
  518.         return 10
  519.  
  520.  
  521.  
  522. class GetOnly:
  523.     '''Dummy sequence class defining __getitem__ but not __len__.'''
  524.     
  525.     def __getitem__(self, ndx):
  526.         return 10
  527.  
  528.  
  529.  
  530. class CmpErr:
  531.     '''Dummy element that always raises an error during comparison'''
  532.     
  533.     def __cmp__(self, other):
  534.         raise ZeroDivisionError
  535.  
  536.  
  537.  
  538. class TestErrorHandling(unittest.TestCase):
  539.     
  540.     def test_non_sequence(self):
  541.         for f in (bisect_left, bisect_right, insort_left, insort_right):
  542.             self.assertRaises(TypeError, f, 10, 10)
  543.         
  544.  
  545.     
  546.     def test_len_only(self):
  547.         for f in (bisect_left, bisect_right, insort_left, insort_right):
  548.             self.assertRaises(AttributeError, f, LenOnly(), 10)
  549.         
  550.  
  551.     
  552.     def test_get_only(self):
  553.         for f in (bisect_left, bisect_right, insort_left, insort_right):
  554.             self.assertRaises(AttributeError, f, GetOnly(), 10)
  555.         
  556.  
  557.     
  558.     def test_cmp_err(self):
  559.         seq = [
  560.             CmpErr(),
  561.             CmpErr(),
  562.             CmpErr()]
  563.         for f in (bisect_left, bisect_right, insort_left, insort_right):
  564.             self.assertRaises(ZeroDivisionError, f, seq, 10)
  565.         
  566.  
  567.     
  568.     def test_arg_parsing(self):
  569.         for f in (bisect_left, bisect_right, insort_left, insort_right):
  570.             self.assertRaises(TypeError, f, 10)
  571.         
  572.  
  573.  
  574. libreftest = '\nExample from the Library Reference:  Doc/lib/libbisect.tex\n\nThe bisect() function is generally useful for categorizing numeric data.\nThis example uses bisect() to look up a letter grade for an exam total\n(say) based on a set of ordered numeric breakpoints: 85 and up is an `A\',\n75..84 is a `B\', etc.\n\n    >>> grades = "FEDCBA"\n    >>> breakpoints = [30, 44, 66, 75, 85]\n    >>> from bisect import bisect\n    >>> def grade(total):\n    ...           return grades[bisect(breakpoints, total)]\n    ...\n    >>> grade(66)\n    \'C\'\n    >>> map(grade, [33, 99, 77, 44, 12, 88])\n    [\'E\', \'A\', \'B\', \'D\', \'F\', \'A\']\n\n'
  575. __test__ = {
  576.     'libreftest': libreftest }
  577.  
  578. def test_main(verbose = None):
  579.     test_bisect = test_bisect
  580.     import test
  581.     BuiltinFunctionType = BuiltinFunctionType
  582.     import types
  583.     import sys as sys
  584.     test_classes = [
  585.         TestBisect,
  586.         TestInsort]
  587.     if isinstance(bisect_left, BuiltinFunctionType):
  588.         test_classes.append(TestErrorHandling)
  589.     
  590.     test_support.run_unittest(*test_classes)
  591.     test_support.run_doctest(test_bisect, verbose)
  592.     if verbose and hasattr(sys, 'gettotalrefcount'):
  593.         import gc as gc
  594.         counts = [
  595.             None] * 5
  596.         for i in xrange(len(counts)):
  597.             test_support.run_unittest(*test_classes)
  598.             gc.collect()
  599.             counts[i] = sys.gettotalrefcount()
  600.         
  601.         print counts
  602.     
  603.  
  604. if __name__ == '__main__':
  605.     test_main(verbose = True)
  606.  
  607.